Component({
    properties: {
        text: String,
        color: {
            type: String,
            value: '#fff'
        },
        backgroundColor: {
            type: String,
            value: '#e64340'
        },
        duration: {
            type: Number,
            value: 3000
        }
    },

    methods: {
        show() {
            const {duration} = this.data;

            clearTimeout(this.timer);
            this.setData({
                show: true
            });

            if (duration > 0 && duration !== Infinity) {
                this.timer = setTimeout(() => {
                    this.hide();
                }, duration);
            }
        },

        hide() {
            clearTimeout(this.timer);
            this.setData({
                show: false
            });
        }
    }
});

const defaultOptions = {
    selector: '#van-notify',
    duration: 3000
};

function Notify(options = {}) {
    const pages = getCurrentPages();
    const ctx = pages[pages.length - 1];

    options = Object.assign({}, defaultOptions, parseParam(options));

    const el = ctx.selectComponent(options.selector);
    delete options.selector;

    if (el) {
        el.setData({
            ...options
        });
        el.show();
    }
}

function parseParam(params = '') {
    return typeof params === 'object' ? params : {text: params};
}

module.exports = Notify;
